package marketing

import (
	"jlpay-sdk-go/pkg/jlpay/models"
)

// MerchantActivityConfigQueryRequest 商户活动配置查询请求
type MerchantActivityConfigQueryRequest struct {
	models.OrgBaseRequest
	// ActID 活动ID
	ActID string `json:"act_id,omitempty"`
	// MerchNo 商户号
	MerchNo string `json:"merch_no,omitempty"`
}

// NewMerchantActivityConfigQueryRequest 创建新的商户活动配置查询请求
func NewMerchantActivityConfigQueryRequest() *MerchantActivityConfigQueryRequest {
	return &MerchantActivityConfigQueryRequest{}
}

// SetActID 设置活动ID
func (m *MerchantActivityConfigQueryRequest) SetActID(actID string) *MerchantActivityConfigQueryRequest {
	m.ActID = actID
	return m
}

// SetMerchNo 设置商户号
func (m *MerchantActivityConfigQueryRequest) SetMerchNo(merchNo string) *MerchantActivityConfigQueryRequest {
	m.MerchNo = merchNo
	return m
}

// Path 获取接口路径
func (m *MerchantActivityConfigQueryRequest) Path() string {
	return "/open/org/bank/act-bridge/act-merch-relation/query"
}

// ToMap 将请求对象转换为map，过滤掉值为空的字段
func (m *MerchantActivityConfigQueryRequest) ToMap() (map[string]interface{}, error) {
	data, err := m.OrgBaseRequest.ToMap()
	if err != nil {
		return nil, err
	}

	// 添加当前字段
	if m.ActID != "" {
		data["act_id"] = m.ActID
	}
	if m.MerchNo != "" {
		data["merch_no"] = m.MerchNo
	}

	return data, nil
}

// MerchantActivityConfigData 商户活动配置数据
type MerchantActivityConfigData struct {
	// ActID 活动ID
	ActID string `json:"act_id,omitempty"`
	// MerchNo 商户号
	MerchNo string `json:"merch_no,omitempty"`
	// TermNos 终端号列表
	TermNos []string `json:"term_nos,omitempty"`
	// StartTime 开始时间
	StartTime string `json:"start_time,omitempty"`
	// EndTime 结束时间
	EndTime string `json:"end_time,omitempty"`
	// Status 状态
	Status string `json:"status,omitempty"`
	// CreateTime 创建时间
	CreateTime string `json:"create_time,omitempty"`
	// UpdateTime 更新时间
	UpdateTime string `json:"update_time,omitempty"`
}

// NewMerchantActivityConfigData 创建新的商户活动配置数据
func NewMerchantActivityConfigData() *MerchantActivityConfigData {
	return &MerchantActivityConfigData{}
}

// SetActID 设置活动ID
func (m *MerchantActivityConfigData) SetActID(actID string) *MerchantActivityConfigData {
	m.ActID = actID
	return m
}

// SetMerchNo 设置商户号
func (m *MerchantActivityConfigData) SetMerchNo(merchNo string) *MerchantActivityConfigData {
	m.MerchNo = merchNo
	return m
}

// SetTermNos 设置终端号列表
func (m *MerchantActivityConfigData) SetTermNos(termNos []string) *MerchantActivityConfigData {
	m.TermNos = termNos
	return m
}

// SetStartTime 设置开始时间
func (m *MerchantActivityConfigData) SetStartTime(startTime string) *MerchantActivityConfigData {
	m.StartTime = startTime
	return m
}

// SetEndTime 设置结束时间
func (m *MerchantActivityConfigData) SetEndTime(endTime string) *MerchantActivityConfigData {
	m.EndTime = endTime
	return m
}

// SetStatus 设置状态
func (m *MerchantActivityConfigData) SetStatus(status string) *MerchantActivityConfigData {
	m.Status = status
	return m
}

// SetCreateTime 设置创建时间
func (m *MerchantActivityConfigData) SetCreateTime(createTime string) *MerchantActivityConfigData {
	m.CreateTime = createTime
	return m
}

// SetUpdateTime 设置更新时间
func (m *MerchantActivityConfigData) SetUpdateTime(updateTime string) *MerchantActivityConfigData {
	m.UpdateTime = updateTime
	return m
}

// ToMap 将对象转换为map
func (m *MerchantActivityConfigData) ToMap() (map[string]interface{}, error) {
	data := make(map[string]interface{})

	if m.ActID != "" {
		data["act_id"] = m.ActID
	}
	if m.MerchNo != "" {
		data["merch_no"] = m.MerchNo
	}
	if len(m.TermNos) > 0 {
		data["term_nos"] = m.TermNos
	}
	if m.StartTime != "" {
		data["start_time"] = m.StartTime
	}
	if m.EndTime != "" {
		data["end_time"] = m.EndTime
	}
	if m.Status != "" {
		data["status"] = m.Status
	}
	if m.CreateTime != "" {
		data["create_time"] = m.CreateTime
	}
	if m.UpdateTime != "" {
		data["update_time"] = m.UpdateTime
	}

	return data, nil
}

// MerchantActivityConfigQueryResponse 商户活动配置查询响应
type MerchantActivityConfigQueryResponse struct {
	models.StandardResponse
	// Data 商户活动配置数据列表
	Data []*MerchantActivityConfigData `json:"data,omitempty"`
}

// NewMerchantActivityConfigQueryResponse 创建商户活动配置查询响应
func NewMerchantActivityConfigQueryResponse() *MerchantActivityConfigQueryResponse {
	return &MerchantActivityConfigQueryResponse{}
}
